package main

import "fmt"

//在go里，数组是值类型的
func printArray(arr [5]int){
	arr[0] = 100
	for j, v := range arr {
		fmt.Println(j, v)
	}
}

func main() {
	var arr1 [5]int
	//使用海象运算符声明数组，需要赋初值
	arr2 := [3]int{1, 3, 5}
	arr3 := [...]int{2, 4, 6, 8, 10}
	fmt.Println(arr1, arr2, arr3)

	//二维数组
	var grid [4][5]int
	fmt.Println(grid)

	// 遍历数组
	for i := 0; i < len(arr3); i++ {
		fmt.Println(arr3[i])
	}

	fmt.Println("1.range方式遍历")
	for j := range arr3 {
		fmt.Println(arr3[j])
	}

	fmt.Println("2.range方式遍历")
	for j, v := range arr3 {
		fmt.Println(j, v)
	}

	//内部修改了数组的值
	//如果是python，传递这种数据，内部修改外面肯定也改了
	//但go不会，因为数组在go里是值类型
	fmt.Println("printArray(arr1)")
	printArray(arr1)
	fmt.Println("printArray(arr3)")
	printArray(arr3)
	//printArray(arr2)  //arr2的长度是3，不能传进来
	fmt.Println("arr1, arr3:")
	fmt.Println(arr1, arr3)
	//==> [10]int和[20]int是不同类型
	//==> 调用func f(arr [10]int)会拷贝数组
	//==> 在go语言里一般不直接使用数组，而是使用切片
}
